package com.youku.util;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;

@SuppressWarnings("unchecked")
public class CloneHelper {

	public static <T extends Serializable> T deepClone(T obj) {
		T cloneObj = null;
		try {
			// 写入字节流
			ByteArrayOutputStream out = new ByteArrayOutputStream();
			ObjectOutputStream obs = new ObjectOutputStream(out);
			obs.writeObject(obj);
			obs.close();

			// 分配内存，写入原始对象，生成新对象
			ByteArrayInputStream ios = new ByteArrayInputStream(out.toByteArray());
			ObjectInputStream ois = new ObjectInputStream(ios);
			// 返回生成的新对象
			cloneObj = (T) ois.readObject();
			ois.close();
		} catch (Exception e) {
			throw new RuntimeException(e);
		}
		return cloneObj;
	}

	// public static <T> T shallowClone(T obj) {
	// try {
	// return (T) BeanUtils.cloneBean(obj);
	// } catch (IllegalAccessException | InstantiationException |
	// InvocationTargetException
	// | NoSuchMethodException e) {
	// throw new RuntimeException(e);
	// }
	// }
}
